package com.yxx.service;

import com.yxx.entityModel.vo.Result.PageResult;
import com.yxx.entityModel.vo.query.ArticleQuery;
import com.yxx.entityModel.vo.query.PageQuery;
import com.yxx.entityModel.vo.request.ArticleRequest;
import com.yxx.entityModel.vo.request.DeleteRequest;
import com.yxx.entityModel.vo.request.RecommendRequest;
import com.yxx.entityModel.vo.request.TopRequest;
import com.yxx.entityModel.vo.response.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 文章模块业务接口
 * @author yuxiangxun
 * @date 2025/1/21
 * @apiNote
 */
public interface ArticleService {

    /**
     * 查看后台文章列表
     * @param articleQuery
     * @return
     */
    PageResult<ArticleBackResponse> listAriticleBackVO(ArticleQuery articleQuery);

    /**
     * 添加文章
     * @param articleRequest
     */
    void addArticle(ArticleRequest articleRequest);

    /**
     * 删除文章
     * @param articleIdList
     */
    void deleteArticle(List<Integer> articleIdList);

    /**
     * 回收或恢复文章
     * @param deleteRequest
     */
    void updateArticleDelete(DeleteRequest deleteRequest);

    /**
     * 修改文章
     * @param articleRequest
     */
    void updateArticle(ArticleRequest articleRequest);

    /**
     * 编辑文章
     * @param articleId
     * @return
     */
    ArticleInfoResponse editArticle(Integer articleId);

    /**
     * 上传文章图片
     * @param file
     * @return
     */
    String saveArticleImages(MultipartFile file);

    /**
     * 置顶文章
     * @param topRequest
     */
    void updateArticleTop(TopRequest topRequest);

    /**
     *  推荐文章
     * @param recommendRequest
     */
    void updateArticleRecommend(RecommendRequest recommendRequest);

    /**
     * 搜索文章
     * @param keyword
     * @return
     */
    List<ArticleSearchResponse> listArticlesBySearch(String keyword);

    /**
     * 查看首页文章列表
     * @param pageQuery
     * @return
     */
    PageResult<ArticleHomeResponse> listArticleHomeVO(PageQuery pageQuery);

    /**
     * 查看文章
     * @param articleId
     * @return
     */
    ArticleResponse getArticleHomeById(Integer articleId);

    /**
     * 推荐文章
     * @return
     */
    List<ArticleRecommendResponse> listArticleRecommendVO();

    /**
     * 查看文章归档
     * @param pageQuery
     * @return
     */
    PageResult<ArchiveResponse> listArchiveVO(PageQuery pageQuery);
}
